home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / include / linux / virtio_blk.h < prev    next >
C/C++ Source or Header  |  2008-10-24  |  2KB  |  62 lines

  1. #ifndef _LINUX_VIRTIO_BLK_H
  2. #define _LINUX_VIRTIO_BLK_H
  3. /* This header is BSD licensed so anyone can use the definitions to implement
  4.  * compatible drivers/servers. */
  5. #include <linux/virtio_config.h>
  6.  
  7. /* The ID for virtio_block */
  8. #define VIRTIO_ID_BLOCK    2
  9.  
  10. /* Feature bits */
  11. #define VIRTIO_BLK_F_BARRIER    0    /* Does host support barriers? */
  12. #define VIRTIO_BLK_F_SIZE_MAX    1    /* Indicates maximum segment size */
  13. #define VIRTIO_BLK_F_SEG_MAX    2    /* Indicates maximum # of segments */
  14. #define VIRTIO_BLK_F_GEOMETRY    4    /* Legacy geometry available  */
  15. #define VIRTIO_BLK_F_RO        5    /* Disk is read-only */
  16. #define VIRTIO_BLK_F_BLK_SIZE    6    /* Block size of disk is available*/
  17.  
  18. struct virtio_blk_config
  19. {
  20.     /* The capacity (in 512-byte sectors). */
  21.     __u64 capacity;
  22.     /* The maximum segment size (if VIRTIO_BLK_F_SIZE_MAX) */
  23.     __u32 size_max;
  24.     /* The maximum number of segments (if VIRTIO_BLK_F_SEG_MAX) */
  25.     __u32 seg_max;
  26.     /* geometry the device (if VIRTIO_BLK_F_GEOMETRY) */
  27.     struct virtio_blk_geometry {
  28.         __u16 cylinders;
  29.         __u8 heads;
  30.         __u8 sectors;
  31.     } geometry;
  32.     /* block size of device (if VIRTIO_BLK_F_BLK_SIZE) */
  33.     __u32 blk_size;
  34. } __attribute__((packed));
  35.  
  36. /* These two define direction. */
  37. #define VIRTIO_BLK_T_IN        0
  38. #define VIRTIO_BLK_T_OUT    1
  39.  
  40. /* This bit says it's a scsi command, not an actual read or write. */
  41. #define VIRTIO_BLK_T_SCSI_CMD    2
  42.  
  43. /* Barrier before this op. */
  44. #define VIRTIO_BLK_T_BARRIER    0x80000000
  45.  
  46. /* This is the first element of the read scatter-gather list. */
  47. struct virtio_blk_outhdr
  48. {
  49.     /* VIRTIO_BLK_T* */
  50.     __u32 type;
  51.     /* io priority. */
  52.     __u32 ioprio;
  53.     /* Sector (ie. 512 byte offset) */
  54.     __u64 sector;
  55. };
  56.  
  57. /* And this is the final byte of the write scatter-gather list. */
  58. #define VIRTIO_BLK_S_OK        0
  59. #define VIRTIO_BLK_S_IOERR    1
  60. #define VIRTIO_BLK_S_UNSUPP    2
  61. #endif /* _LINUX_VIRTIO_BLK_H */
  62.